home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-04-03 | 30.0 KB | 1,018 lines | [TEXT/MPS ] |
- //----------------------------------------------------------------------------------------
- // UEventHandler.cp
- // Copyright © 1984-96 by Apple Computer, Inc. All rights reserved.
- //----------------------------------------------------------------------------------------
-
- #ifndef __UEVENTHANDLER__
- #include "UEventHandler.h"
- #endif
-
- // MacApp
-
- #ifndef __UBEHAVIOR__
- #include "UBehavior.h"
- #endif
-
- #ifndef __UCOMMAND__
- #include "UCommand.h"
- #endif
-
- #ifndef __UCOREGLOBALS__
- #include "UCoreGlobals.h"
- #endif
-
- #ifndef __UCOREUTILITIES__
- #include "UCoreUtilities.h"
- #endif
-
- #ifndef __UDEBUG__
- #include "UDebug.h"
- #endif
-
- #ifndef __UDISPATCHER__
- #include "UDispatcher.h"
- #endif
-
- #ifndef __UEVENT__
- #include "UEvent.h"
- #endif
-
- #ifndef __UFAILURE__
- #include "UFailure.h"
- #endif
-
- #ifndef __UGEOMETRY__
- #include "UGeometry.h"
- #endif
-
- #ifndef __UMACAPPGLOBALS__
- #include "UMacAppGlobals.h"
- #endif
-
- #ifndef __USTREAM__
- #include "UStream.h"
- #endif
-
- // Toolbox
-
- #ifndef __RESOURCES__
- #include <Resources.h>
- #endif
-
- // ANSI
-
- #ifndef __STDIO__
- #include <stdio.h>
- #endif
-
- #ifndef __STDLIB__
- #include <stdlib.h>
- #endif
-
-
- //----------------------------------------------------------------------------------------
- // static data members
- //----------------------------------------------------------------------------------------
- CPoint TEventHandler::gStdHysteresis(4, 4);
-
-
- //========================================================================================
- // CLASS CHandlerIterator
- //========================================================================================
- #undef Inherited
- #define Inherited CIterator
-
- //----------------------------------------------------------------------------------------
- // CHandlerIterator::Reset:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- CHandlerIterator::CHandlerIterator(TEventHandler* chainHead)
- {
- fFirstHandler = fCurrentHandler = chainHead;
- // Retrieve next handler now since DoToEventHandler may free fCurrentHandler
- if (chainHead)
- fNextHandler = chainHead ? chainHead->GetNextHandler() : NULL;
- }
-
- //----------------------------------------------------------------------------------------
- // CHandlerIterator::Reset:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TEventHandler* CHandlerIterator::FirstHandler()
- {
- Reset();
-
- return fFirstHandler;
- }
-
- //----------------------------------------------------------------------------------------
- // CHandlerIterator::Reset:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TEventHandler* CHandlerIterator::NextHandler()
- {
- Advance();
-
- return fCurrentHandler;
- }
-
- //----------------------------------------------------------------------------------------
- // CHandlerIterator::Advance:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void CHandlerIterator::Advance()
- {
- fCurrentHandler = fNextHandler;
- if (fCurrentHandler)
- fNextHandler = fCurrentHandler->GetNextHandler();
- }
-
-
- //========================================================================================
- // CLASS TEventHandler
- //========================================================================================
- #undef Inherited
- #define Inherited TObject
-
- #pragma segment MAEvtHandlerNonRes
- MA_DEFINE_CLASS_M1(TEventHandler,
- Inherited);
-
- //----------------------------------------------------------------------------------------
- // TEventHandler constructor
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TEventHandler::TEventHandler() :
- fNextHandler(NULL),
- fBehavior(NULL),
- fIdentifier(kNoIdentifier),
- fIdleFreq(kMaxIdleTime),
- // Assume it never wants idle time
- fLastIdle(0),
- fEnabled(TRUE) // Default to taking events
- {
- }
- // TEventHandler::TEventHandler
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::IEventHandler:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::IEventHandler(TEventHandler* itsNextHandler)
- {
- IObject();
- fNextHandler = itsNextHandler;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::BecameWindowTarget:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::BecameWindowTarget()
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::BecameTarget:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::BecameTarget()
- {
- HandleEvent(mBecameTarget, this, NULL);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::BecomeTarget:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEventHandler::BecomeTarget()
- {
- Boolean returnVal = FALSE;
-
- TEventHandler * currentTarget = gDispatcher->GetTarget();
- if (this != currentTarget)
- {
- if (currentTarget->ResignTarget())
- {
- gDispatcher->SetTarget(this);
- returnVal = TRUE;
- }
- }
- else
- returnVal = TRUE;
-
- return returnVal;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::ResignTarget:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEventHandler::ResignTarget()
- {
- Boolean returnVal = FALSE;
-
- TEventHandler * currentTarget = gDispatcher->GetTarget();
- long reason = currentTarget->WillingToResignTarget();
-
- if (reason == 0)
- {
- currentTarget->TargetValidationSucceeded();
-
- gDispatcher->SetTarget(gDispatcher);
- returnVal = TRUE;
- }
- else
- currentTarget->TargetValidationFailed(reason);
-
- return returnVal;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::SetEnable:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::SetEnable(Boolean state)
- {
- fEnabled = state;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::Free:
- //----------------------------------------------------------------------------------------
- #pragma segment MAClose
-
- TEventHandler::~TEventHandler()
- {
- if ((gDispatcher != NULL) && (gDispatcher != this) && (gDispatcher->GetTarget() == this))
- {
- if (GetNextHandler())
- gDispatcher->SetTarget(GetNextHandler());
- else
- gDispatcher->SetTarget(gDispatcher);
- }
- fNextHandler = NULL;
-
- fBehavior = (TBehavior *)FreeIfObject(fBehavior);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::Clone:
- //----------------------------------------------------------------------------------------
- #pragma segment MANonRes
-
- TObject* TEventHandler::Clone()
- {
- MAVolatileInit(TEventHandler * , aClonedEventHandler, (TEventHandler *)(Inherited::Clone()));
-
- // since we "own" our behaviors, let's clone 'em too!
- aClonedEventHandler->fBehavior = NULL; // remove reference to behaviors
-
- FailInfo fi;
- Try(fi)
- {
- CBehaviorIterator iter(this);
-
- for (TBehavior * aBehavior = iter.FirstBehavior(); iter.More(); aBehavior = iter.NextBehavior())
- {
- TBehavior * aClonedBehavior = (TBehavior *)aBehavior->Clone();
- aClonedEventHandler->AddBehavior(aClonedBehavior);
- }
- fi.Success();
- }
- else // Recover
- {
- aClonedEventHandler->Free();
- fi.ReSignal();
- }
-
- return aClonedEventHandler;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::AddHandler:
- //----------------------------------------------------------------------------------------
- #pragma segment MANonRes
-
- TEventHandler* TEventHandler::AddHandler(TEventHandler* headOfChain)
- {
- // add headOfChain to the end of the chain
- if (fNextHandler != NULL)
- fNextHandler->AddHandler(headOfChain);
- else
- fNextHandler = headOfChain;
- return this; // new head of chain
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::RemoveHandler:
- //----------------------------------------------------------------------------------------
- #pragma segment MANonRes
-
- TEventHandler* TEventHandler::RemoveHandler(TEventHandler* headOfChain)
- {
- TEventHandler * prevCohandler;
- TEventHandler * currCohandler;
- TEventHandler * newHeadOfChain;
-
- prevCohandler = NULL;
- currCohandler = headOfChain;
- newHeadOfChain = headOfChain;
- while (currCohandler != NULL)
- {
- if (currCohandler == this) // found it
- {
- if (prevCohandler == NULL) // I was the head of the chain, so there
- // will be a new head of chain
- newHeadOfChain = fNextHandler;
- else
- prevCohandler->fNextHandler = fNextHandler;// take me out of the link
- fNextHandler = NULL; // remember that i'm not in the chain
- // anymore
- currCohandler = NULL; // So loop will end
- }
- else
- {
- prevCohandler = currCohandler;
- currCohandler = currCohandler->fNextHandler;
- }
- }
-
- return newHeadOfChain;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoCommandKeyEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::DoCommandKeyEvent(TToolboxEvent* event)
- {
- if (GetNextHandler())
- GetNextHandler()->HandleCommandKey(event);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::HandleCommandKey:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::HandleCommandKey(TToolboxEvent* event)
- {
- TBehavior * aBehavior = GetFirstEnabledBehavior();
- if (aBehavior)
- aBehavior->DoCommandKeyEvent(event);
- else
- DoCommandKeyEvent(event);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoCoHandlerEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEventHandler::DoCoHandlerEvent(TEvent*)
- {
- return FALSE;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoHelp:
- //----------------------------------------------------------------------------------------
- #pragma segment MAHelp
-
- void TEventHandler::DoHelp(TToolboxEvent* event,
- long& message)
- {
- if (GetNextHandler())
- GetNextHandler()->DoHelp(event, message);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::NextIdle:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- long TEventHandler::NextIdle()
- {
- // first compute the next needed idle time based on myself
- long returnVal;
-
- if ((fIdleFreq != kMaxIdleTime) && (IsEnabled()))// Does it idle at all?
- {
- if (fLastIdle == 0) // if never idled then it needs idling now
- returnVal = TickCount();
- else
- returnVal = fLastIdle + fIdleFreq;
- }
- else
- returnVal = kMaxIdleTime;
-
- // then bound it by the attached behaviors
- CBehaviorIterator iter(this);
-
- for (TBehavior * aBehavior = iter.FirstBehavior(); iter.More(); aBehavior = iter.NextBehavior())
- returnVal = Min(returnVal, aBehavior->NextIdle());
-
- return returnVal;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::HandleIdle:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::HandleIdle(IdlePhase phase)
- {
- TBehavior * aBehavior = GetFirstBehavior();
- if (aBehavior)
- aBehavior->HandleIdle(phase);
-
- if ((fIdleFreq != kMaxIdleTime) && IsEnabled())// Does it idle at all?
- {
- // idleBegin and idleEnd don't respect fIdleFreq because they are notifications
- // that the application is beginning/ ending idle. idleContinues, however, are
- // parceled out at the fIdleFreq.
- if ((phase != idleContinue) || (TickCount() - fLastIdle >= fIdleFreq))
- {
- // don't store the fLastIdle if I FREE'd myself or the idlePhase
- // is not idleContinue
- if (!(DoIdle(phase)) && (phase == idleContinue))
- fLastIdle = TickCount();
- }
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoIdle:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEventHandler::DoIdle(IdlePhase)
- {
- return FALSE; // Did not free myself
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoKeyEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::DoKeyEvent(TToolboxEvent* event)
- {
- if (GetNextHandler())
- GetNextHandler()->HandleKeyCommand(event);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoKeyUp:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::DoKeyUp(TToolboxEvent* event)
- {
- if (GetNextHandler())
- GetNextHandler()->HandleKeyUp(event);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::HandleKeyCommand:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::HandleKeyCommand(TToolboxEvent* event)
- {
- TBehavior * aBehavior = GetFirstEnabledBehavior();
- if (aBehavior)
- aBehavior->DoKeyEvent(event);
- else
- DoKeyEvent(event);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::HandleKeyUp:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::HandleKeyUp(TToolboxEvent* event)
- {
- TBehavior * aBehavior = GetFirstEnabledBehavior();
- if (aBehavior)
- aBehavior->DoKeyUp(event);
- else
- DoKeyUp(event);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoMenuCommand:
- //----------------------------------------------------------------------------------------
- #pragma segment MASelCommand
-
- void TEventHandler::DoMenuCommand(CommandNumber aCommandNumber)
- {
- if (GetNextHandler())
- GetNextHandler()->HandleMenuCommand(aCommandNumber);
- #if qDebugMsg
- else
- fprintf(stderr, "No one handled the command %1d\n", aCommandNumber);
- #endif
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::HandleMenuCommand:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::HandleMenuCommand(CommandNumber aCommandNumber)
- {
- TBehavior * aBehavior = GetFirstEnabledBehavior();
- if (aBehavior)
- aBehavior->DoMenuCommand(aCommandNumber);
- else
- DoMenuCommand(aCommandNumber);
-
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoMultiClick:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEventHandler::DoMultiClick(CPoint lastDownPt,
- CPoint newDownPt)
- {
- return GetNextHandler() ? GetNextHandler()->DoMultiClick(lastDownPt, newDownPt) :
- (abs(lastDownPt.h - newDownPt.h) <= (gStdHysteresis.h)) && (abs(lastDownPt.v - newDownPt.v) <= (gStdHysteresis.v));
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoSetupMenus:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::DoSetupMenus()
- {
- if (GetNextHandler())
- GetNextHandler()->HandleSetupMenus();
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::HandleSetupMenus:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::HandleSetupMenus()
- {
- TBehavior * aBehavior = GetFirstEnabledBehavior();
- if (aBehavior)
- aBehavior->DoSetupMenus();
- else
- DoSetupMenus();
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoUpdate:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::DoUpdate(ChangeID theChange,
- TObject* changedObject,
- TObject* changedBy,
- TDependencySpace* dependencySpace)// Override
- {
- TBehavior * aBehavior = GetFirstEnabledBehavior();
- if (aBehavior)
- aBehavior->DoBehaviorUpdate(theChange, changedObject, changedBy, dependencySpace);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::RetrieveAnEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TEvent* TEventHandler::RetrieveAnEvent()
- {
- return GetNextHandler() ? GetNextHandler()->RetrieveAnEvent() : NULL;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoKeySelection:
- //----------------------------------------------------------------------------------------
- #pragma segment MANonRes
-
- void TEventHandler::DoKeySelection(const CStr255&/* selectionString */ )
- {
- SubClassResponsibility();
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::SetIdleFreq:
- //----------------------------------------------------------------------------------------
- #pragma segment MANonRes
-
- void TEventHandler::SetIdleFreq(long newIdleFreq)
- {
- fIdleFreq = newIdleFreq;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::RemoveBehavior:
- //----------------------------------------------------------------------------------------
- #pragma segment MANonRes
-
- void TEventHandler::RemoveBehavior(TBehavior* theBehavior)
- {
- if (fBehavior)
- {
- if (fBehavior == theBehavior)
- {
- fBehavior = theBehavior->GetNextBehavior();
- if (fBehavior)
- fBehavior->SetPreviousBehavior(NULL);
-
- // remove theBehavior from the linked list
- theBehavior->SetNextBehavior(NULL);
- theBehavior->SetPreviousBehavior(NULL);
- theBehavior->SetOwner(NULL);
- }
- else
- fBehavior->RemoveBehavior(theBehavior);
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::AddBehavior:
- //----------------------------------------------------------------------------------------
- #pragma segment MANonRes
-
- void TEventHandler::AddBehavior(TBehavior* theBehavior)
- {
- if (theBehavior)
- {
- #if qDebug
- CBehaviorIterator iter(this);
-
- for (TBehavior * aBehavior = iter.FirstBehavior(); iter.More(); aBehavior = iter.NextBehavior())
- if (aBehavior == theBehavior)
- ProgramBreak("AddBehavior: Attempting to add a behavior that has already been added.");
- #endif
-
- if (fBehavior)
- fBehavior->AppendBehavior(theBehavior);
- else
- fBehavior = theBehavior;
-
- theBehavior->SetOwner(this); // make this object its owner
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::GetFirstEnabledBehavior:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TBehavior* TEventHandler::GetFirstEnabledBehavior() const
- {
- return fBehavior ? (fBehavior->IsEnabled() ? fBehavior : fBehavior->GetNextEnabledBehavior()) : NULL;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::GetBehaviorWithIdentifier:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TBehavior* TEventHandler::GetBehaviorWithIdentifier(IDType itsIdentifier)
- {
- TBehavior * returnVal = NULL;
-
- CBehaviorIterator iter(this);
-
- for (TBehavior * aBehavior = iter.FirstBehavior(); iter.More(); aBehavior = iter.NextBehavior())
- {
- if (aBehavior->fIdentifier == itsIdentifier)
- {
- returnVal = aBehavior;
- break;
- }
- }
-
- return returnVal;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::SelectOwner:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::SelectOwner(Boolean select)
- {
- CBehaviorIterator iter(this);
-
- for (TBehavior * aBehavior = iter.FirstBehavior(); iter.More(); aBehavior = iter.NextBehavior())
- aBehavior->SelectOwner(select);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::IsSelected:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEventHandler::IsSelected()
- {
- TBehavior * firstBehavior = GetFirstBehavior();
-
- return firstBehavior ? firstBehavior->IsOwnerSelected() : FALSE;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::PostAnEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::PostAnEvent(TEvent* event)
- {
- if (GetNextHandler())
- GetNextHandler()->PostAnEvent(event);
- else
- {
- #if qDebug
- WrLblHexLongint("No one posted the event ", (long)(event));
- #endif
-
- if (event->ShouldFreeOnCompletion())
- event = (TEvent *)(FreeIfObject(event));
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::PostCommand:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::PostCommand(TCommand* command)
-
- {
- if (command)
- {
- if (GetNextHandler())
- GetNextHandler()->PostCommand(command);
- else
- {
- #if qDebug
- WrLblHexLongint("No one posted the command ", (long)(command));
- fprintf(stderr, "\n");
- #endif
-
- if (command->ShouldFreeOnCompletion())
- command = (TCommand *)(FreeIfObject(command));
- }
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::ResignedWindowTarget:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::ResignedWindowTarget()
-
- {
- HandleEvent(mResignedWindowTarget, this, NULL);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::GetWindow:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- TWindow* TEventHandler::GetWindow() const
-
- {
- return NULL;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::ResignedTarget:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::ResignedTarget()
-
- {
- HandleEvent(mResignedTarget, this, NULL);
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::SetTargetSelection:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::SetTargetSelection(Boolean /* redraw */)
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::IsTarget:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEventHandler::IsTarget()
- {
- return this == gDispatcher->GetTarget();
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::Terminate:
- //----------------------------------------------------------------------------------------
- #pragma segment MATerminate
-
- void TEventHandler::Terminate()
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::ReadFrom:
- //----------------------------------------------------------------------------------------
- #pragma segment MAReadResource
-
- void TEventHandler::ReadFrom(TStream* aStream)
- {
- Inherited::ReadFrom(aStream);
-
- fIdentifier = aStream->ReadIDType();
- fEnabled = aStream->ReadBoolean();
- fIdleFreq = aStream->ReadLong();
-
- short numBehaviors = aStream->ReadInteger();
- for (short count = 0; count < numBehaviors; ++count)
- {
- TBehavior * aBehavior = NULL;
-
- if (aStream->ReadStreamObject((TObject * &)aBehavior))
- AddBehavior(aBehavior);
- #if qDebugMsg
- else
- ProgramBreak("###Unknown behavior in TEventHandler::ReadFrom: Attempting to create a TBehavior.");
- #endif
-
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::WriteTo:
- //----------------------------------------------------------------------------------------
- #pragma segment MAWriteResource
-
- void TEventHandler::WriteTo(TStream* aStream)
- {
- Inherited::WriteTo(aStream);
-
- aStream->WriteIDType(fIdentifier);
- aStream->WriteBoolean(fEnabled);
- aStream->WriteLong(fIdleFreq);
-
- short numBehaviors = 0;
- long numPosition = aStream->GetPosition(); // Remember the position of the
- // count in the stream.
- aStream->WriteInteger(numBehaviors); // Write initial num behaviors.
- TBehavior * aBehavior = GetFirstBehavior();
- while (aBehavior)
- {
- ++numBehaviors;
- aStream->WriteStreamObject(aBehavior, kStandardObject);
- aBehavior = aBehavior->GetNextBehavior();
- }
-
- if (numBehaviors) // if there were any behaviors...
- {
- long currentPosition = aStream->GetPosition();// Remember where we are.
- aStream->SetPosition(numPosition); // Go back to position of count.
- aStream->WriteInteger(numBehaviors); // Write the count.
- aStream->SetPosition(currentPosition); // Go back to where we were.
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::WantsToBeTarget:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- Boolean TEventHandler::WantsToBeTarget()
-
- {
- return FALSE;
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::WillingToResignTarget:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- long TEventHandler::WillingToResignTarget()
-
- {
- return 0; // kValidValue
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::KeyEventToComponents:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::KeyEventToComponents(TToolboxEvent* event)
-
- {
- if (GetNextHandler())
- GetNextHandler()->KeyEventToComponents(event);
- else
- {
- if ((event->fEventRecord.what == keyDown) || (event->fEventRecord.what == keyUp) || (event->fEventRecord.what == autoKey))
- {
- // Default extractions
- event->fKeyCode = (unsigned short)(event->fEventRecord.message & keyCodeMask) >> 8;
-
- event->fText = (char)(event->fEventRecord.message & charCodeMask);
- if (MACharacterByteType((Ptr) & event->fText[0], 0, event->fKeyScript) == smFirstByte)
- event->fText += (char)(event->fEventRecords[1].message & charCodeMask);
- }
- }
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::TargetValidationSucceeded:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::TargetValidationSucceeded()
-
- {
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::TargetValidationFailed:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::TargetValidationFailed(long /* reason */)
-
- {
- }
-
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::DoEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::DoEvent(EventNumber eventNumber,
- TEventHandler* source,
- TEvent* event)
- {
- if (GetNextHandler())
- GetNextHandler()->HandleEvent(eventNumber, source, event);
- #if qDebugMsg
- else if (gIntenseDebugging)
- {
- fprintf(stderr, "in TEventHandler.DoHandleEvent: no one handled the event: %1d\n", eventNumber);
- WrLblHexLongint(" From source: ", (long)(source));
- fprintf(stderr, "\n");
- WrLblHexLongint(" Event object: ", (long)(event));
- fprintf(stderr, "\n");
- }
- #endif
-
- }
-
- //----------------------------------------------------------------------------------------
- // TEventHandler::HandleEvent:
- //----------------------------------------------------------------------------------------
- #pragma segment MAEvtHandlerRes
-
- void TEventHandler::HandleEvent(EventNumber eventNumber,
- TEventHandler* source,
- TEvent* event)
- {
- TBehavior * aBehavior = GetFirstEnabledBehavior();
- if (aBehavior)
- aBehavior->DoEvent(eventNumber, source, event);
- else
- DoEvent(eventNumber, source, event);
- }
-
- //----------------------------------------------------------------------------------------
- // End of UEventHandler.cp
-
- #pragma segment Inline
-
-